package entities;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

@Entity
@Table(
	name = "PERSOON", 
	uniqueConstraints = @UniqueConstraint(columnNames = {"bsn"}))
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Persoon
{
	protected int id;
	protected String naam;
	protected String voornaam;
	protected String tussenvoegsel;
	protected Date geboortedatum;
	
	protected String postcode;
	protected String telefoonnummer;
	protected String email;
	
	protected String rekeningnummer;
	protected String gebruikersnaam;
	protected String inlogcode;
	protected int bsn;
	
	// Constructors
	
	/**
	 * Constructor voor Hibernate
	 */
	protected Persoon()
	{
		
	}
	public Persoon(String naam, String voornaam, Date geboortedatum, String rekeningnummer, String gebruikersnaam, String inlogcode, int bsn)
	{
		this.naam = naam;
		this.voornaam = voornaam;
		this.geboortedatum = geboortedatum;
		this.rekeningnummer = rekeningnummer;
		this.gebruikersnaam = gebruikersnaam;
		this.inlogcode = inlogcode;
		this.bsn = bsn;
	}
	/*public Persoon(String naam, String voornaam, Date geboortedatum, String postcode, String rekeningnummer, String gebruikersnaam, String inlogcode, int bsn)
	{
		this(naam, voornaam, geboortedatum, rekeningnummer, gebruikersnaam, inlogcode, bsn);
		this.postcode = postcode;
	}
	public Persoon(String naam, String voornaam, Date geboortedatum, String postcode, String telefoonnummer, String rekeningnummer, String gebruikersnaam, String inlogcode, int bsn)
	{
		this(naam, voornaam, geboortedatum, postcode, rekeningnummer, gebruikersnaam, inlogcode, bsn);
		this.telefoonnummer = telefoonnummer;
	}
	public Persoon(String naam, String voornaam, Date geboortedatum, String postcode, String telefoonnummer, String email, String rekeningnummer, String gebruikersnaam, String inlogcode, int bsn)
	{
		this(naam, voornaam, geboortedatum, postcode, rekeningnummer, telefoonnummer, gebruikersnaam, inlogcode, bsn);
		this.email = email;
	}
	
	public Persoon(String naam, String voornaam, String tussenvoegsel, Date geboortedatum, String rekeningnummer, String gebruikersnaam, String inlogcode, int bsn)
	{
		this(naam, voornaam, geboortedatum, rekeningnummer, gebruikersnaam, inlogcode, bsn);
		this.tussenvoegsel = tussenvoegsel;
	}
	public Persoon(String naam, String voornaam, String tussenvoegsel, Date geboortedatum, String postcode, String rekeningnummer, String gebruikersnaam, String inlogcode, int bsn)
	{
		this(naam, voornaam, geboortedatum, postcode, rekeningnummer, gebruikersnaam, inlogcode, bsn);
		this.tussenvoegsel = tussenvoegsel;
	}
	public Persoon(String naam, String voornaam, String tussenvoegsel, Date geboortedatum, String postcode, String telefoonnummer, String rekeningnummer, String gebruikersnaam, String inlogcode, int bsn)
	{
		this(naam, voornaam, geboortedatum, postcode, telefoonnummer, rekeningnummer, gebruikersnaam, inlogcode, bsn);
		this.tussenvoegsel = tussenvoegsel;
	}
	public Persoon(String naam, String voornaam, String tussenvoegsel, Date geboortedatum, String postcode, String telefoonnummer, String email, String rekeningnummer, String gebruikersnaam, String inlogcode, int bsn)
	{
		this(naam, voornaam, geboortedatum, postcode, telefoonnummer, email, rekeningnummer, gebruikersnaam, inlogcode, bsn);
		this.tussenvoegsel = tussenvoegsel;
	}*/
	
	// Getters en Setters
	
	@Id
	@GeneratedValue(strategy = GenerationType.TABLE)
	@Column(name = "id")
	public int getId()
	{
		return id;
	}
	public void setId(int id)
	{
		this.id = id;
	}
	@Column(name = "naam")
	public String getNaam()
	{
		return naam;
	}
	public void setNaam(String naam)
	{
		this.naam = naam;
	}
	@Column(name = "voornaam")
	public String getVoornaam()
	{
		return voornaam;
	}
	public void setVoornaam(String voornaam)
	{
		this.voornaam = voornaam;
	}
	@Column(name = "tussenvoegsel")
	public String getTussenvoegsel()
	{
		return tussenvoegsel;
	}
	public void setTussenvoegsel(String tussenvoegsel)
	{
		this.tussenvoegsel = tussenvoegsel;
	}
	@Column(name = "geboortedatum")
	public Date getGeboortedatum()
	{
		return geboortedatum;
	}
	public void setGeboortedatum(Date geboortedatum)
	{
		this.geboortedatum = geboortedatum;
	}
	@Column(name = "postcode")
	public String getPostcode()
	{
		return postcode;
	}
	public void setPostcode(String postcode)
	{
		this.postcode = postcode;
	}
	@Column(name = "telefoonnummer")
	public String getTelefoonnummer()
	{
		return telefoonnummer;
	}
	public void setTelefoonnummer(String telefoonnummer)
	{
		this.telefoonnummer = telefoonnummer;
	}
	@Column(name = "email")
	public String getEmail()
	{
		return email;
	}
	public void setEmail(String email)
	{
		this.email = email;
	}
	@Column(name = "rekeningnummer")
	public String getRekeningnummer()
	{
		return rekeningnummer;
	}
	public void setRekeningnummer(String rekeningnummer)
	{
		this.rekeningnummer = rekeningnummer;
	}
	@Column(name = "gebruikersnaam")
	public String getGebruikersnaam()
	{
		return gebruikersnaam;
	}
	public void setGebruikersnaam(String gebruikersnaam)
	{
		this.gebruikersnaam = gebruikersnaam;
	}
	@Column(name = "inlogcode")
	public String getInlogcode()
	{
		return inlogcode;
	}
	public void setInlogcode(String inlogcode)
	{
		this.inlogcode = inlogcode;
	}
	@Column(name = "bsn", unique = true)
	public int getBsn()
	{
		return bsn;
	}
	public void setBsn(int bsn)
	{
		this.bsn = bsn;
	}
	
	// Methods
	
	public String toString()
	{
		return naam + (tussenvoegsel == null ? "" : " " + tussenvoegsel) + ", " + voornaam;
	}
}
